package Day15学员管理系统;

/*
    功能分析:
        1.欢迎界面,退出
        2.添加学生
        3.查看学生
        4.删除学生
        5.修改学生
    功能实现:
        1.实现欢迎界面(每次操作后都回到欢迎界面  加入死循环)
            1).打印语句打印信息
            2).让用户输入
            3).对输入信息进行匹配
            4).实现退出系统
        2.添加学生
            1).提示输入学生学号 姓名 年龄 居住地
            2).根据输入的信息,创建学生对象
            3).将对象添加到集合
        3.查看学生
            1).定义学生类,创建多个学生
               属性:学号 姓名 年龄 居住地
            2).创建ArrayList集合
               创建对象 添加到集合中
            3).定义一个方法,用语查看学生
               先打印标题,再遍历集合打印学生信息
        4.删除学生
            1).提示输入删除学生的学号
            2).遍历学习,得到每个学生,判断学号,删除对应
        5.修改学生
            1).提示输入要修改的学生的学号
            2).提示输入新的属性:姓名 年龄 居住地
            3).修改

 */

import java.util.ArrayList;
import java.util.Scanner;

public class demo {
    public static void main(String[] args) {

        //创建ArrayList集合
        ArrayList<Student> list = new ArrayList<>();
        //创建测试对象
        Student s1 = new Student("s001", "刘德华", 58, "香港");
        Student s2 = new Student("s002", "张学友", 55, "香港");
        list.add(s1);
        list.add(s2);

        //1.1欢迎界面+死循环
        xx:
        while (true) { //可以用for+if-->demo1
            System.out.println("----------欢迎来到学员管理系统----------");
            System.out.println("1.添加学生");
            System.out.println("2.查看学生");
            System.out.println("3.删除学生");
            System.out.println("4.修改学生");
            System.out.println("5.退出系统");
            //1.2用户输入
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入选项:");
            int number = sc.nextInt();
            //1.3匹配
            switch (number) {
                case 1:
                    //定义方法 添加学生
                    addstudent(list);
                    break;
                case 2:
                    //定义方法 查看学生
                    getstudent(list);
                    break;
                case 3:
                    //定义方法 删除学生
                    delstudent(list);
                    break;
                case 4:
                    //定义方法 修改学生
                    setstudent(list);
                    break;
                case 5:
                    //退出系统
                    System.out.println("欢迎再次使用!");
                    break xx; //break结束switch, 让他结束死循环,把while取名
                //2. return;   //return在main方法中,直接结束main方法
                //3.System.exit(0); //让虚拟机停止运行程序,企业中千万不要使用
                default:
                    System.out.println("输入有误");
                    break;
            }
        }
    }

    //定义方法-1.添加学生
    public static void addstudent(ArrayList<Student> list) {
        //需要解决学号重复问题,提示用户再次输入
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学生学号");
        String num = null;
        //调用方法,对比输入的学号是否重复
        while (true) {
            num = sc.next(); //num定义在了循环内,要在while外面声明!!!!!!!!!!!!!!否则循环外不能使用num
            boolean repeat = isRepeatnum(list, num);
            if (repeat) {
                System.out.println("学号重复,请重新输入:");
            } else {
                break;
            }
        }
        System.out.println("请输入学生姓名");
        String name = sc.next();
        System.out.println("请输入学生年龄");
        int age = sc.nextInt();
        System.out.println("请输入学生居住地");
        String address = sc.next();
        //创建学生对象存储录入的数据,添加到集合
        Student s = new Student(num, name, age, address);
        list.add(s);
        System.out.println("添加学生成功");
    }

    //判断学号是否重复
    //返回布尔类型
    //参数列表是所有学生,要判断
    public static boolean isRepeatnum(ArrayList<Student> list, String num) {
        boolean repeat = false; //默认false 不重复
        for (int i = 0; i < list.size(); i++) {
            Student s = list.get(i);
            if (num.equals(s.getNum())) {
                repeat = true;
                break;
            }
        }
        return repeat;
    }

    //定义方法-2.查看学生
    public static void getstudent(ArrayList<Student> list) {
        //如果集合里没有数据,不打印
        if (list.size() == 0) {
            System.out.println("系统没有学生信息");
            return;
        }
        //先打印标题,再遍历集合打印学生信息
        System.out.println("学号\t\t" + "姓名\t\t" + "年龄\t\t" + "居住地");
        for (int i = 0; i < list.size(); i++) {
            Student s = list.get(i);
            System.out.println(s.getNum() + "\t" + s.getName() + "\t" + s.getAge() + "岁\t\t" + s.getAddress());
        }
    }

    //定义方法-3.删除学生
    public static void delstudent(ArrayList<Student> list) {
        //如果没有学生,不删除
        if (list.size() == 0) {
            System.out.println("系统中没有学生信息,不需要删除");
            return;
        }
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要删除的学生的学号:");
        String num = sc.next();

        for (int i = 0; i < list.size(); i++) {
            Student s = list.get(i);
            if (num.equals(s.getNum())) {
                list.remove(i);
                System.out.println("删除" + num + "学生成功");
                return;
            }
        }
        //遍历完没有找到学号
        System.out.println("没有找到要删除的学生");
    }

    //定义方法-4.修改学生
    public static void setstudent(ArrayList<Student> list) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要修改学生的学号:");
        String num = sc.next();
        //遍历集合
        for (int i = 0; i < list.size(); i++) {
            Student s = list.get(i);

            if(num.equals(s.getNum())){
                System.out.println("请输入新的姓名:");
                String newname = sc.next();
                System.out.println("请输入新的年龄:");
                int newage = sc.nextInt();
                System.out.println("请输入新的居住地:");
                String newaddress = sc.next();
                //
                s.setName(newname);
                s.setAge(newage);
                s.setAddress(newaddress);
                System.out.println("修改学生信息成功");
                return;
            }
        }
        //遍历完没有对应学生
        System.out.println("没有要修改的学生");
    }
}
